A server cluster is a group of at least two independent servers connected by a network and managed as a single system. The clustering of servers provides a number of benefits over independent servers. One important benefit is that cluster software, which is run on each of the servers in a cluster, automatically detects application failures or the failure of another server in the cluster. Upon detection of such failures, failed applications and the like can be terminated and restarted on a surviving server.
Other benefits include the ability for administrators to inspect the status of cluster resources, and accordingly balance workloads among different servers in the cluster to improve performance. Dynamic load balancing is also available. Such manageability also provides administrators with the ability to update one server in a cluster without taking important data and applications offline. As can be appreciated, server clusters are used in critical database management, file and intranet data sharing, messaging, general business applications and the like.
Thus, the failover of an application from one server (i.e., machine) to another in the cluster may be automatic in response to a software or hardware failure on the first machine, or alternatively may be manually initiated by an administrator. However, unless an application is "cluster-aware" (i.e., designed with the knowledge that it may be run in a clustering environment), problems arise during failover.
One problem with existing applications which are not cluster-aware, i.e., legacy applications, is that such applications assume that the current machine name is the only computer name. Consequently, if the application exposes the machine name to clients, or writes the machine name into its persistent configuration information, the system will not function correctly when the application fails over and runs on a different machine having a different machine name. By way of example, an electronic mail application program provides its machine name to other machines connected thereto in a network. If the application is running in a cluster and is failed over to another machine, this other machine's name will not be the name that was provided to the other network machines, and the application will not function correctly.
A cluster-aware application avoids this problem when it is running in a cluster by allowing multiple machine names and calling a cluster-specific application programming interface (API) that returns a virtual computer name regardless of the actual cluster machine on which the application is being run. However, it is not practical to change the many legacy applications so as to be cluster-aware applications. At the same time, other applications on the same machine may need to receive different computer names (e.g., a different virtual computer name or its actual machine name) rather than any particular virtual machine name in response to a request for its computer name. As a result, it is not feasible to develop an interface that simply returns a single virtual computer name each time such a request is made by an application.